Población de países del Banco Mundial
Vamos a importar los datos world_bank_pop.csv. Lo primero siempre es cargar las paqueterías necesarias.
library(tidyverse)
library(lubridate)
library(patchwork)
library(tidyquant)
library(plotly)
Vamos a cargar los datos. Para que sea más fácil y reproducible su R Notebook, es necesario que estén guardados dentro de la carpeta en donde se encuentra su proyecto.
wb_pop <- read_csv("data/world_bank_pop.csv")
Parsed with column specification:
cols(
.default = col_double(),
country = col_character(),
indicator = col_character()
)
See spec(...) for full column specifications.
wb_pop
Vemos que los datos no están limpios.
Lo primero que tenemos que hacer es pasar los años a filas. Usaremos pivot_longer() de la paquetería tidyr.
wb_pop_long <- wb_pop %>%
pivot_longer(cols = -c(country, indicator),
names_to = "año", values_to = "valor"
) %>%
mutate(año = as.integer(año))
wb_pop_long
Ahora queremos pasar los indicadores a columnas distintas.
wb_pop_long %>%
pivot_wider(names_from = indicator,
values_from = valor)
Pudimos haber hecho estos dos pasos en uno solo, con ayuda de los pipes (%>%).
wb_pop_tidy <- wb_pop %>%
# primero pasamos los años a filas
pivot_longer(cols = -c(country, indicator),
names_to = "año", values_to = "valor"
) %>%
# cambiamos los años para que sean números enteros
mutate(año = as.integer(año)) %>%
# ahora pasamos los indicadores a columnas
pivot_wider(names_from = indicator,
values_from = valor) %>%
# cambio la variable country a factores
mutate(country = as_factor(country))
wb_pop_tidy
Si quisiéramos ver solo los datos para México, podemos usar filter().
Para quedarnos solo con datos de México:
wb_pop_tidy %>%
filter(country == "MEX")
Para quedarnos con datos de México y solo las variables de año y población urbana total:
wb_pop_tidy %>%
filter(country == "MEX") %>%
select(año, SP.URB.TOTL)
Ahora, si quisiéramos todas las variables, menos SP.URB.TOTL, para México y Brasil:
wb_pop_tidy %>%
filter(country %in% c("MEX","BRA")) %>%
select(-SP.URB.TOTL)
Si queremos deducir cuál es la población rural por país, tendríamos que agregar una nueva variable. Lo haremos con mutate().
wb_pop_tidy %>%
filter(country %in% c("MEX","BRA","CAN")) %>%
mutate(pob_rural = SP.POP.TOTL - SP.URB.TOTL)
Si quisiéramos saber el % de la población que vive en las zonas rurales, podríamos hacerlo igualmente con mutate().
wb_pop_tidy <- wb_pop_tidy %>%
filter(country %in% c("MEX","BRA","CAN")) %>%
mutate(pob_rural = SP.POP.TOTL - SP.URB.TOTL,
pct_rural = pob_rural / SP.POP.TOTL,
pct_urbana = 1 - pct_rural)
wb_pop_tidy
Vamos a graficar el crecimiento de la población total a lo largo del tiempo.
g <- ggplot(data = wb_pop_tidy, aes(x = año, color = country))
g + geom_line(aes(y = SP.POP.TOTL))

Podemos utilizar una escala logarítmica en el eje y para visualizar mejor los datos.
g + geom_line(aes(y = SP.POP.TOTL)) + scale_y_log10()

g + geom_line(aes(y = pct_rural)) +
geom_line(aes(y = pct_urbana))

g + geom_line(aes(y = pct_rural)) +
geom_line(aes(y = pct_urbana)) +
facet_wrap(~ country)

p1 <- g + geom_line(aes(y = pct_rural)) +
theme(legend.position = "none")
p2 <- g + geom_line(aes(y = pct_urbana)) +
theme(legend.position = "none")
p3 <- g + geom_line(aes(y = SP.POP.TOTL)) + scale_y_log10()
p1 + p2 + p3

p1 / p2 /p3

p3 / (p1 + p2) +
plot_annotation(title = "Acomodando varias gráficas con patchwork",
subtitle = "Población total y evolución de la población urbana y rural")

Ventas de autos totales en EEUU
autos <- tq_get("TOTALNSA", get = "economic.data",
Warning messages:
1: In readChar(file, size, TRUE) : truncating string with embedded nuls
2: In readChar(file, size, TRUE) : truncating string with embedded nuls
3: In readChar(file, size, TRUE) : truncating string with embedded nuls
4: In readChar(file, size, TRUE) : truncating string with embedded nuls
5: In readChar(file, size, TRUE) : truncating string with embedded nuls
6: In readChar(file, size, TRUE) : truncating string with embedded nuls
7: In readChar(file, size, TRUE) : truncating string with embedded nuls
from = "1977-01-01")
autos
Vamos a quitar la variable symbol que no nos aporta información relevante (con select()), y vamos a renombrar la variable price para que se llame ventas.
autos <- autos %>%
select(-symbol) %>%
rename(ventas = price)
autos
autos %>% tail()
p <- autos %>%
ggplot(aes(x = date, y = ventas)) +
geom_line()
ggplotly(p)
Esta gráfica nos muestra que la serie presenta una fuerte estacionaliadad
p <- autos %>%
ggplot(aes(x = date, y = ventas)) +
geom_line()
ggplotly(p)
Agregando líneas y etiquetas para mostrar las crisis.
p +
geom_vline(xintercept = ymd("2008-10-01"),
linetype = "dashed", color = "red",
size = 1.5) +
geom_vline(xintercept = ymd("2020-03-01"),
linetype = "dotted", color = "darkgreen",
size = 1.5) +
annotate("label", x = c(ymd("2008-10-01"),
ymd("2019-07-01")),
y = c(1750,1700), label = c("Inmobiliaria '08", "COVID-19"), color = "blue", size = 3)

p + geom_hline(yintercept = max(autos$ventas),
linetype = 4, size = 1.2, color = "purple") +
geom_hline(yintercept = min(autos$ventas),
linetype = 5, size = 1.2, color = "turquoise1") +
geom_hline(yintercept = mean(autos$ventas),
linetype = 8, size = 1, color = "orchid2")

ggplotl
LS0tDQp0aXRsZTogIkltcG9ydGFjacOzbiBkZSBkYXRvcyB5IGxpbXBpZXphIg0KYXV0aG9yOiAiUGFibG8gQmVuYXZpZGVzIEhlcnJlcmEiDQpkYXRlOiAyMDIwLTA2LTAxDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiB1bml0ZWQNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQojIFBvYmxhY2nDs24gZGUgcGHDrXNlcyBkZWwgQmFuY28gTXVuZGlhbA0KDQpWYW1vcyBhIGltcG9ydGFyIGxvcyBkYXRvcyBgd29ybGRfYmFua19wb3AuY3N2YC4gTG8gcHJpbWVybyBzaWVtcHJlIGVzIGNhcmdhciBsYXMgcGFxdWV0ZXLDrWFzIG5lY2VzYXJpYXMuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeSh0aWR5cXVhbnQpDQpsaWJyYXJ5KHBsb3RseSkNCmBgYA0KDQpWYW1vcyBhIGNhcmdhciBsb3MgZGF0b3MuIFBhcmEgcXVlIHNlYSBtw6FzIGbDoWNpbCB5IHJlcHJvZHVjaWJsZSBzdSBSIE5vdGVib29rLCBlcyBuZWNlc2FyaW8gcXVlIGVzdMOpbiBndWFyZGFkb3MgZGVudHJvIGRlIGxhIGNhcnBldGEgZW4gZG9uZGUgc2UgZW5jdWVudHJhIHN1IHByb3llY3RvLg0KDQpgYGB7cn0NCndiX3BvcCA8LSByZWFkX2NzdigiZGF0YS93b3JsZF9iYW5rX3BvcC5jc3YiKQ0Kd2JfcG9wDQpgYGANClZlbW9zIHF1ZSBsb3MgZGF0b3Mgbm8gZXN0w6FuIGxpbXBpb3MuDQoNCkxvIHByaW1lcm8gcXVlIHRlbmVtb3MgcXVlIGhhY2VyIGVzIHBhc2FyIGxvcyBhw7FvcyBhIGZpbGFzLiBVc2FyZW1vcyBgcGl2b3RfbG9uZ2VyKClgIGRlIGxhIHBhcXVldGVyw61hIGB0aWR5cmAuDQoNCmBgYHtyfQ0Kd2JfcG9wX2xvbmcgPC0gIHdiX3BvcCAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gLWMoY291bnRyeSwgaW5kaWNhdG9yKSwNCiAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImHDsW8iLCB2YWx1ZXNfdG8gPSAidmFsb3IiDQogICAgICAgICAgICAgICApICU+JSANCiAgbXV0YXRlKGHDsW8gPSBhcy5pbnRlZ2VyKGHDsW8pKQ0Kd2JfcG9wX2xvbmcNCmBgYA0KDQoNCkFob3JhIHF1ZXJlbW9zIHBhc2FyIGxvcyBpbmRpY2Fkb3JlcyBhIGNvbHVtbmFzIGRpc3RpbnRhcy4NCmBgYHtyfQ0Kd2JfcG9wX2xvbmcgJT4lIA0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gaW5kaWNhdG9yLA0KICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IHZhbG9yKQ0KYGBgDQoNClB1ZGltb3MgaGFiZXIgaGVjaG8gZXN0b3MgZG9zIHBhc29zIGVuIHVubyBzb2xvLCBjb24gYXl1ZGEgZGUgbG9zIHBpcGVzIChgICU+JSBgKS4NCg0KYGBge3J9DQp3Yl9wb3BfdGlkeSA8LSB3Yl9wb3AgJT4lIA0KICAjIHByaW1lcm8gcGFzYW1vcyBsb3MgYcOxb3MgYSBmaWxhcw0KICBwaXZvdF9sb25nZXIoY29scyA9IC1jKGNvdW50cnksIGluZGljYXRvciksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJhw7FvIiwgdmFsdWVzX3RvID0gInZhbG9yIg0KICAgICAgICAgICAgICAgKSAlPiUgDQogICMgY2FtYmlhbW9zIGxvcyBhw7FvcyBwYXJhIHF1ZSBzZWFuIG7Dum1lcm9zIGVudGVyb3MNCiAgbXV0YXRlKGHDsW8gPSBhcy5pbnRlZ2VyKGHDsW8pKSAlPiUgDQogICMgYWhvcmEgcGFzYW1vcyBsb3MgaW5kaWNhZG9yZXMgYSBjb2x1bW5hcw0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gaW5kaWNhdG9yLA0KICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IHZhbG9yKSAlPiUgDQogICMgY2FtYmlvIGxhIHZhcmlhYmxlIGNvdW50cnkgYSBmYWN0b3Jlcw0KICBtdXRhdGUoY291bnRyeSA9IGFzX2ZhY3Rvcihjb3VudHJ5KSkNCndiX3BvcF90aWR5DQpgYGANCg0KU2kgcXVpc2nDqXJhbW9zIHZlciBzb2xvIGxvcyBkYXRvcyBwYXJhIE3DqXhpY28sIHBvZGVtb3MgdXNhciBgZmlsdGVyKClgLg0KDQpQYXJhIHF1ZWRhcm5vcyBzb2xvIGNvbiBkYXRvcyBkZSBNw6l4aWNvOg0KYGBge3J9DQp3Yl9wb3BfdGlkeSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ID09ICJNRVgiKQ0KYGBgDQoNClBhcmEgcXVlZGFybm9zIGNvbiBkYXRvcyBkZSBNw6l4aWNvIHkgc29sbyBsYXMgdmFyaWFibGVzIGRlIGHDsW8geSBwb2JsYWNpw7NuIHVyYmFuYSB0b3RhbDoNCg0KYGBge3J9DQp3Yl9wb3BfdGlkeSAlPiUgDQogIGZpbHRlcihjb3VudHJ5ID09ICJNRVgiKSAlPiUgDQogIHNlbGVjdChhw7FvLCBTUC5VUkIuVE9UTCkNCmBgYA0KDQpBaG9yYSwgc2kgcXVpc2nDqXJhbW9zICoqdG9kYXMqKiBsYXMgdmFyaWFibGVzLCBtZW5vcyBgU1AuVVJCLlRPVExgLCBwYXJhIE3DqXhpY28geSBCcmFzaWw6DQoNCmBgYHtyfQ0Kd2JfcG9wX3RpZHkgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAlaW4lIGMoIk1FWCIsIkJSQSIpKSAlPiUgDQogIHNlbGVjdCgtU1AuVVJCLlRPVEwpDQpgYGANCg0KU2kgcXVlcmVtb3MgZGVkdWNpciBjdcOhbCBlcyBsYSBwb2JsYWNpw7NuIHJ1cmFsIHBvciBwYcOtcywgdGVuZHLDrWFtb3MgcXVlIGFncmVnYXIgdW5hIG51ZXZhIHZhcmlhYmxlLiBMbyBoYXJlbW9zIGNvbiBgbXV0YXRlKClgLg0KDQpgYGB7cn0NCndiX3BvcF90aWR5ICU+JSANCiAgZmlsdGVyKGNvdW50cnkgJWluJSBjKCJNRVgiLCJCUkEiLCJDQU4iKSkgJT4lIA0KICBtdXRhdGUocG9iX3J1cmFsID0gU1AuUE9QLlRPVEwgLSBTUC5VUkIuVE9UTCkNCmBgYA0KDQpTaSBxdWlzacOpcmFtb3Mgc2FiZXIgZWwgJSBkZSBsYSBwb2JsYWNpw7NuIHF1ZSB2aXZlIGVuIGxhcyB6b25hcyBydXJhbGVzLCBwb2Ryw61hbW9zIGhhY2VybG8gaWd1YWxtZW50ZSBjb24gYG11dGF0ZSgpYC4NCg0KYGBge3J9DQp3Yl9wb3BfdGlkeSA8LSAgd2JfcG9wX3RpZHkgJT4lIA0KICBmaWx0ZXIoY291bnRyeSAlaW4lIGMoIk1FWCIsIkJSQSIsIkNBTiIpKSAlPiUgDQogIG11dGF0ZShwb2JfcnVyYWwgPSBTUC5QT1AuVE9UTCAtIFNQLlVSQi5UT1RMLA0KICAgICAgICAgcGN0X3J1cmFsID0gcG9iX3J1cmFsIC8gU1AuUE9QLlRPVEwsDQogICAgICAgICBwY3RfdXJiYW5hID0gMSAtIHBjdF9ydXJhbCkNCndiX3BvcF90aWR5DQpgYGANCg0KVmFtb3MgYSBncmFmaWNhciBlbCBjcmVjaW1pZW50byBkZSBsYSAqKnBvYmxhY2nDs24gdG90YWwqKiBhIGxvIGxhcmdvIGRlbCB0aWVtcG8uDQoNCmBgYHtyfQ0KZyA8LSBnZ3Bsb3QoZGF0YSA9IHdiX3BvcF90aWR5LCBhZXMoeCA9IGHDsW8sIGNvbG9yID0gY291bnRyeSkpDQoNCmcgKyBnZW9tX2xpbmUoYWVzKHkgPSBTUC5QT1AuVE9UTCkpDQpgYGANCg0KUG9kZW1vcyB1dGlsaXphciB1bmEgZXNjYWxhIGxvZ2Fyw610bWljYSBlbiBlbCBlamUgKnkqIHBhcmEgdmlzdWFsaXphciBtZWpvciBsb3MgZGF0b3MuDQoNCmBgYHtyfQ0KZyArIGdlb21fbGluZShhZXMoeSA9IFNQLlBPUC5UT1RMKSkgKyBzY2FsZV95X2xvZzEwKCkNCmBgYA0KDQpgYGB7cn0NCmcgKyBnZW9tX2xpbmUoYWVzKHkgPSBwY3RfcnVyYWwpKSArDQogIGdlb21fbGluZShhZXMoeSA9IHBjdF91cmJhbmEpKQ0KYGBgDQoNCmBgYHtyfQ0KZyArIGdlb21fbGluZShhZXMoeSA9IHBjdF9ydXJhbCkpICsNCiAgZ2VvbV9saW5lKGFlcyh5ID0gcGN0X3VyYmFuYSkpICsNCiAgZmFjZXRfd3JhcCh+IGNvdW50cnkpDQpgYGANCg0KYGBge3J9DQpwMSA8LSBnICsgZ2VvbV9saW5lKGFlcyh5ID0gcGN0X3J1cmFsKSkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCnAyIDwtIGcgKyBnZW9tX2xpbmUoYWVzKHkgPSBwY3RfdXJiYW5hKSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpwMyA8LSBnICsgZ2VvbV9saW5lKGFlcyh5ID0gU1AuUE9QLlRPVEwpKSArIHNjYWxlX3lfbG9nMTAoKQ0KYGBgDQoNCg0KYGBge3J9DQpwMSArIHAyICsgcDMNCg0KcDEgLyBwMiAvcDMNCg0KcDMgLyAocDEgKyBwMikgKyANCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gIkFjb21vZGFuZG8gdmFyaWFzIGdyw6FmaWNhcyBjb24gcGF0Y2h3b3JrIiwNCiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gIlBvYmxhY2nDs24gdG90YWwgeSBldm9sdWNpw7NuIGRlIGxhIHBvYmxhY2nDs24gdXJiYW5hIHkgcnVyYWwiKQ0KYGBgDQoNCiMgVmVudGFzIGRlIGF1dG9zIHRvdGFsZXMgZW4gRUVVVQ0KDQpgYGB7cn0NCmF1dG9zIDwtIHRxX2dldCgiVE9UQUxOU0EiLCBnZXQgPSAiZWNvbm9taWMuZGF0YSIsDQogICAgICAgICAgICAgICAgZnJvbSA9ICIxOTc3LTAxLTAxIikNCmF1dG9zDQpgYGANCg0KVmFtb3MgYSBxdWl0YXIgbGEgdmFyaWFibGUgYHN5bWJvbGAgcXVlIG5vIG5vcyBhcG9ydGEgaW5mb3JtYWNpw7NuIHJlbGV2YW50ZSAoY29uIGBzZWxlY3QoKWApLCB5IHZhbW9zIGEgcmVub21icmFyIGxhIHZhcmlhYmxlIGBwcmljZWAgcGFyYSBxdWUgc2UgbGxhbWUgYHZlbnRhc2AuDQoNCmBgYHtyfQ0KYXV0b3MgPC0gYXV0b3MgJT4lIA0KICBzZWxlY3QoLXN5bWJvbCkgJT4lIA0KICByZW5hbWUodmVudGFzID0gcHJpY2UpDQphdXRvcw0KYGBgDQoNCmBgYHtyfQ0KYXV0b3MgJT4lIHRhaWwoKQ0KYGBgDQoNCg0KYGBge3J9DQpwIDwtIGF1dG9zICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGF0ZSwgeSA9IHZlbnRhcykpICsNCiAgZ2VvbV9saW5lKCkNCg0KZ2dwbG90bHkocCkNCmBgYA0KDQpFc3RhIGdyw6FmaWNhIG5vcyBtdWVzdHJhIHF1ZSBsYSBzZXJpZSBwcmVzZW50YSB1bmEgZnVlcnRlICoqZXN0YWNpb25hbGlhZGFkKioNCg0KYGBge3J9DQpwIDwtIGF1dG9zICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGF0ZSwgeSA9IHZlbnRhcykpICsNCiAgZ2VvbV9saW5lKCkNCg0KZ2dwbG90bHkocCkNCmBgYA0KDQpBZ3JlZ2FuZG8gbMOtbmVhcyB5IGV0aXF1ZXRhcyBwYXJhIG1vc3RyYXIgbGFzIGNyaXNpcy4NCg0KYGBge3J9DQpwICsgDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHltZCgiMjAwOC0xMC0wMSIpLA0KICAgICAgICAgICAgIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gInJlZCIsDQogICAgICAgICAgICAgc2l6ZSA9IDEuNSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB5bWQoIjIwMjAtMDMtMDEiKSwNCiAgICAgICAgICAgICBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICJkYXJrZ3JlZW4iLA0KICAgICAgICAgICAgIHNpemUgPSAxLjUpICsgDQogIGFubm90YXRlKCJsYWJlbCIsIHggPSBjKHltZCgiMjAwOC0xMC0wMSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHltZCgiMjAxOS0wNy0wMSIpKSwNCiAgICAgICAgICAgICB5ID0gYygxNzUwLDE3MDApLCBsYWJlbCA9IGMoIklubW9iaWxpYXJpYSAnMDgiLCAiQ09WSUQtMTkiKSwgY29sb3IgPSAiYmx1ZSIsIHNpemUgPSAzKQ0KYGBgDQoNCg0KYGBge3J9DQpwICsgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWF4KGF1dG9zJHZlbnRhcyksDQogICAgICAgICAgICAgICBsaW5ldHlwZSA9IDQsIHNpemUgPSAxLjIsIGNvbG9yID0gInB1cnBsZSIpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWluKGF1dG9zJHZlbnRhcyksDQogICAgICAgICAgICAgbGluZXR5cGUgPSA1LCBzaXplID0gMS4yLCBjb2xvciA9ICJ0dXJxdW9pc2UxIikgKw0KZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gbWVhbihhdXRvcyR2ZW50YXMpLCANCiAgICAgICAgICAgbGluZXR5cGUgPSA4LCBzaXplID0gMSwgY29sb3IgPSAib3JjaGlkMiIpDQpgYGANCg0KYGBge3J9DQpnZ3Bsb3RsDQpgYGANCg0KDQo=